package com.c8a.validation.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.*;
import java.io.Serializable;

/**
 * @Author C8A
 * @Date 2022-04-23 20:02
 * @Email 1912327276@qq.com
 * NotNull:验证注解的属性值不是空的
 * AssertTrue:校验注解的属性值是否为真
 * Size:校验注解的属性值的大小介于属性min和max之间:可用于String,Colletion,Map
 * Min:验证注解的值不小于值属性的值
 * Max:验证注解的值不大于值属性的值
 * Email:校验注解的值是个合法的邮箱
 * Patten:正则表达式
 * NotEmpty:验证属性不是空或空：可用于String,Colletion,Map
 * NotBlank:只能应用于文本值,并校验属性不是空或空白
 * Positive和@PositiveOrZero:适用于数值,并校验他们是严格意义的负值,或包括0在内的负值
 * Past和@PastOrPresent:验证一个日期值是在过去或过去(包括现在),可应用于日期类型,包括LocalDateTime
 * Future和FutureOrPresent:验证一个日期值是在未来,或者说是在未来,包括现在
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Student implements Serializable {
    //注意,@NotBlank和@NotEmpty之间使用@NotEmpty即可

    /**
     * 数字类型不能为空使用@NotNull
     */
    @NotNull(message = "id不能为空")
    private Integer id;

    /**
     * 字符串校验不能为空使用@NotBlank
     */
    @NotBlank(groups = Employee.Add.class,message = "name不能为空")
    private String name;

    /**
     * 字符串校验也可以使用NotEmpty:推荐
     * 使用jdk Unicode编码或者正则表达式
     */
    @NotEmpty
    @Pattern(regexp = "^\u521d\u7ea7.*")
    private String title;

    /**
     * 注意:不能为空
     */
    @Range(max = 60, min = 1, message = "年龄范围应该在1-60内。")
    private int age;

    /**
     * 邮箱
     */
    @Email
    private String email;
}
